#ifndef ARCHIVONGRAMAS_H_
#define ARCHIVONGRAMAS_H_

#include "indexes/ArbolBMas.h"
#include "indexes/Registro.h"
#include <string>
#include <vector>

//bigrama
#define TAM_NGRAMA 2

#ifndef N_GRAMA
#define N_GRAMA "str"
#endif

#ifndef ID_TERMINO
#define ID_TERMINO "idTermino"
#endif

/*
 * Clase que define la clave del indice
 */
class ClaveNGrama : public Registro
{
public:
	ClaveNGrama(const string& str="", const long idTerm=0)
	{
		(*this)[N_GRAMA] = Campo(str.c_str(),TAM_NGRAMA);
		(*this)[ID_TERMINO] = idTerm;
	}
	//string getNGrama(){return *((string*) ((*this)[N_GRAMA].getValor()));}
	long getIdTermino(){return *((long*) ((*this)[ID_TERMINO].getValor()));}
};

/*
 * Clase que define el dato
 */
class DatoNGrama : public Registro
{
public:
	DatoNGrama() {	}
};


class archivoNGramas
{
private:
	ArbolBMas<ClaveNGrama,DatoNGrama> indice;	
public:
	archivoNGramas(string ruta);
	~archivoNGramas();
	/*
	 * Agrega relacion NGrama - IdTerm
	 */
	int agregarNGrama(string NGrama, long idTerm);
	/*
	 * Devuelve todos los id de los terminos a los cuales
	 * apunta el NGrama
	 */
	vector<long> obtenerTerminos(string NGrama);
	/*
	 * Devuelve todos los ngramas con todos lo ids
	 * (para mostrar todo el archivo)
	 */
	vector<ClaveNGrama> obtenerTodos(); 
};

#endif /*ARCHIVONGRAMAS_H_*/
